package org.yaglyf.common.httpUtil;

import org.yaglyf.common.util.StringUtils;

import java.lang.reflect.Field;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Created by lenovo on 2016/8/25.
 */
public class RequestParamUtil {

//    public static <T>T getT(Class<?> clazz,HttpServletRequest request,String dateMart) {
//        T t = null;
//        try {
//            t = (T) clazz.newInstance();
//        } catch (Exception e) {
//            return t;
//        }
//        do {
//            Field[] fields = clazz.getDeclaredFields();
//            for (Field f : fields) {
//                try {
//                    String name = f.getName();             //参数名
//                    f.setAccessible(true);                 //设置为可见
//                    Class<?> type = f.getType();           //参数类型
//                    String s = (String) request.getParameter(name);
//                    if (null == s) continue;
//                    if ("java.lang.Integer".equals(type.getName())) {
//                        f.set(t, Integer.parseInt(s));
//                    }
//                    if ("java.lang.String".equals(type.getName())) {
//                        f.set(t, s);
//                    }
//                    if ("java.lang.Double".equals(type.getName())) {
//                        f.set(t, Double.parseDouble(s));
//                    }
//                    if("java.lang.Long".equals(type.getName())){
//                        f.set(t,Long.parseLong(s));
//                    }
//                    if ("java.util.Date".equals(type.getName())) {
//                        f.set(t, dateFormart(s, dateMart));
//                    }
//                } catch (Exception e) {
//                }
//            }
//            clazz = clazz.getSuperclass();
//        } while (clazz != Object.class);
//        return t;
//    }

    public static Date dateFormart(String source,String type){
        SimpleDateFormat format = new SimpleDateFormat(type);
        Date date = null;
        try {
            date = format.parse(source);
        } catch (ParseException e) {
        }
        return date;
    }



    public static <T>T defaultText(Class<?> clazz) {
        T t = null;
        try {
            t = (T) clazz.newInstance();
            do{
                Field[] fields = clazz.getDeclaredFields();
                for (Field f : fields){
                    String name = f.getName();             //参数名
                    f.setAccessible(true);                 //设置为可见
                    Class<?> type = f.getType();           //参数类型
                    if("java.lang.Integer".equals(type.getName())){
                        f.set(t,(int)(Math.random()*100));
                    }
                    if("java.lang.String".equals(type.getName())){
                        f.set(t,(int)(Math.random()*100)+"");
                    }
                    if("java.lang.Double".equals(type.getName())){
                        f.set(t,Double.parseDouble((int)(Math.random()*100)+""));
                    }
                    if("java.lang.Long".equals(type.getName())){
                        f.set(t,Long.parseLong((int)(Math.random()*100)+""));
                    }
                    if("java.util.Date".equals(type.getName())){
                        f.set(t,new Date());
                    }
                }
                clazz = clazz.getSuperclass() ;
            }while(clazz != Object.class);
        } catch (InstantiationException e) {
        } catch (IllegalAccessException e) {
        }
        return t;
    }

    public static <T> T tranParam(T t){
        Class<?> clazz = t.getClass();
        do {
            Field[] fields = clazz.getDeclaredFields();
            for (Field f : fields) {
                try {
                    String name = f.getName();             //参数名
                    f.setAccessible(true);                 //设置为可见
                    Class<?> type = f.getType();           //参数类型
                    if ("java.lang.String".equals(type.getName())) {
                        name = "get"+name.substring(0, 1).toUpperCase()+name.substring(1);
                        String str = (String)clazz.getMethod(name).invoke(t);
                        f.set(t , StringUtils.hasText(str) ? str.trim() : null);
                    }
                } catch (Exception e) {
                }
            }
            clazz = clazz.getSuperclass();
        } while (clazz != Object.class);
        return t;
    }

    public static String tranStr(String str){
        return StringUtils.hasText(str) ? str.trim() : null;
    }
}
